
#include "template/multi_print.h"
#include <cassert>
#include <iostream>

using namespace std;
struct GridDims {
  int dim[3];
  int &operator[](int i) noexcept {
    assert(-1 < i && i < 3);
    return dim[i];
  }
  const int &operator[](int i) const noexcept {
    assert(-1 < i && i < 3);
    return dim[i];
  }
  int &npi() noexcept { return dim[0]; }
  int &npj() noexcept { return dim[1]; }
  int &npk() noexcept { return dim[2]; }
  const int &npi() const noexcept { return dim[0]; }
  const int &npj() const noexcept { return dim[1]; }
  const int &npk() const noexcept { return dim[2]; }
  int *data() noexcept { return dim; }
  const int *data() const noexcept { return dim; }
  int size() const noexcept { return 3; }
};

int main() {
  GridDims g1;
  print(cout, sizeof(g1));

  GridDims arrg[5];
  print(cout, sizeof(arrg));
  

  return 0;
}